#pragma once
#include "..\\..\\SGD Wrappers\SGD_Geometry.h"
#include "..\\..\\SGD Wrappers\SGD_Handle.h"

class Flyweight
{
private:
	int iEmitterType;
	int iEmitterWidth;
	int iEmitterHeight;
	int iEmitterRange;
	float fAngle;
	float fMinLife;
	float fMaxLife;
	float fStartColorA;
	float fStartColorR;
	float fStartColorG;
	float fStartColorB;
	float fEndColorA;
	float fEndColorR;
	float fEndColorG;
	float fEndColorB;
	float fSpeedStart;
	float fSpeedEnd;
	float fScaleStart;
	float fScaleEnd;
	float fRotationChangePerSec;
	float fWeight;
	bool bGravity;
	bool bWind;
	SGD::Point position;
	SGD::Rectangle drawRect;
	SGD::Vector centerPoint;
	SGD::Vector velocityStart;
	SGD::Vector velocityEnd;
	SGD::HTexture image;

public:
	Flyweight();
	Flyweight(const Flyweight& that);
	Flyweight& operator=(const Flyweight& that);
	~Flyweight();

	// Accessors
	int GetEmitterType();
	int GetEmitterWidth();
	int GetEmitterHeight();
	int GetEmitterRange();
	float GetAngle();
	float GetMinLife();
	float GetMaxLife();
	float GetStartColorA();
	float GetStartColorR();
	float GetStartColorG();
	float GetStartColorB();
	float GetEndColorA();
	float GetEndColorR();
	float GetEndColorG();
	float GetEndColorB();
	float GetStartSpeed();
	float GetEndSpeed();
	float GetStartScale();
	float GetEndScale();
	float GetRotationRate();
	float GetWeight();
	bool GetGravity();
	bool GetWind();
	SGD::Point GetPosition();
	SGD::Rectangle GetDrawRect();
	SGD::Vector GetCenterPoint();
	SGD::Vector GetStartVelocity();
	SGD::Vector GetEndVelocity();
	SGD::HTexture GetImage();

	// Mutators
	void SetEmitterType(int type);
	void SetEmitterWidth(int width);
	void SetEmitterHeight(int height);
	void SetEmitterRange(int range);
	void SetAngle(float angle);
	void SetMinLife(float life);
	void SetMaxLife(float life);
	void SetStartColorA(float color);
	void SetStartColorR(float color);
	void SetStartColorG(float color);
	void SetStartColorB(float color);
	void SetEndColorA(float color);
	void SetEndColorR(float color);
	void SetEndColorG(float color);
	void SetEndColorB(float color);
	void SetStartSpeed(float speed);
	void SetEndSpeed(float speed);
	void SetStartScale(float scale);
	void SetEndScale(float scale);
	void SetRotationRate(float rotation);
	void SetWeight(float weight);
	void SetGravity(bool gravity);
	void SetWind(bool wind);
	void SetPosition(SGD::Point point);
	void SetDrawRect(SGD::Rectangle rect);
	void SetDrawRect(float left, float top, float right, float bottom);
	void SetCenterPoint(SGD::Vector point);
	void SetStartVelocity(SGD::Vector velocity);
	void SetEndVelocity(SGD::Vector velocity);
	void SetImage(SGD::HTexture img);
};

